package com.fpmsa.officeweb.controller.weixin;

import com.fpmsa.officeweb.constant.OWConstant;
import com.fpmsa.officeweb.core.exception.BizExceptionEnum;
import com.fpmsa.officeweb.core.exception.GunsException;
import com.fpmsa.officeweb.core.util.ToolUtil;
import com.fpmsa.officeweb.model.News;
import com.fpmsa.officeweb.service.INewsCategoryService;
import com.fpmsa.officeweb.service.INewsService;
import com.fpmsa.officeweb.service.OfficeWebService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;

/**
 * @Auther: Huang Yuehong
 * @Description: 官网微信端相关管理
 * @Date: 2018/7/19 16:26
 */
@Controller
@RequestMapping(value = "/wx")
public class WeixinController {

    private String WX_PREFIX = "templates/wx/";

    @Autowired
    private OfficeWebService officeWebService;

    @Autowired
    private INewsService newsService;

    @Autowired
    private INewsCategoryService newsCategoryService;

    @RequestMapping(value = "/wx_npmes1")
    public String wx_npmes1(Model model){

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_npmes1.html";
    }

    /**
     * 跳转到微信协会地址页面
     */
    @RequestMapping(value="/wx_address")
    public String wx_address(Model model){

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_address.html";
    }

    /**
     * 跳转到微信问道页面
     */
    @RequestMapping(value="/wx_ask")
    public String wx_ask(Model model){

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_ask.html";
    }

    /**
     * 跳转到微信通知公告列表页面
     */
    @RequestMapping(value="/wx_news_anounce")
    public String wx_news_anounce(Model model){

        // 获取新闻列表（类别为“通知公告”）,按时间降序排列
        List<News> newsList = officeWebService.getNewsList(OWConstant.OW_ANOUNCEMENT,OWConstant.OW_SHOW_NEWS_NUM,false);
        // 转换create_time字段，拆分为“年”和“月日”两部分，其余属性不变，用于前台新闻列表显示
        List<Map<String,Object>> anounceMapList = newsService.formatCreateTime(newsList);
        model.addAttribute("anounceMapList",anounceMapList);

        // 用来判断页面上将左边选中的菜单文字设置成蓝色（class=on）
        model.addAttribute("flagname",OWConstant.OW_ANOUNCEMENT);

        Integer countNews = newsService.getCountOfCategory(OWConstant.OW_ANOUNCEMENT);
        if (countNews > OWConstant.OW_SHOW_NEWS_NUM){
            model.addAttribute("isShowMore",1);//表示页面显示“点击查看更多”按钮
        }else{
            model.addAttribute("isShowMore",0);//不显示
        }

        // category放到前台作为“浏览更多”方法的参数
        model.addAttribute("category",newsCategoryService.getIdByName(OWConstant.OW_ANOUNCEMENT));

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_news_anounce.html";
    }

    /**
     * 跳转到微信新闻列表页面
     */
    @RequestMapping(value="/wx_news")
    public String wx_news(Model model){

        // 获取新闻列表（类别为“协会新闻”）,按时间降序排列
        List<News> newsList = officeWebService.getNewsList(OWConstant.OW_ASSOCIATION_NEWS,OWConstant.OW_SHOW_NEWS_NUM,false);
        // 转换create_time字段，拆分为“年”和“月日”两部分，其余属性不变，用于前台新闻列表显示
        List<Map<String,Object>> newsMapList = newsService.formatCreateTime(newsList);
        model.addAttribute("newsMapList",newsMapList);

        // 用来判断页面上将左边选中的菜单文字设置成蓝色（class=on）
        model.addAttribute("flagname",OWConstant.OW_ASSOCIATION_NEWS);

        Integer countNews = newsService.getCountOfCategory(OWConstant.OW_ASSOCIATION_NEWS);
        if (countNews > OWConstant.OW_SHOW_NEWS_NUM){
            model.addAttribute("isShowMore",1);//表示页面显示“点击查看更多”按钮
        }else{
            model.addAttribute("isShowMore",0);//不显示
        }

        // category放到前台作为“浏览更多”方法的参数
        model.addAttribute("category",newsCategoryService.getIdByName(OWConstant.OW_ASSOCIATION_NEWS));

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_news.html";
    }

    /**
     * 跳转到微信新闻列表页面(微信端导航页面)
     */
    @RequestMapping(value="/wx_news_nav")
    public String wx_news_nav(Model model){

        // 获取新闻列表（类别为“协会新闻”）,按时间降序排列
        List<News> newsList = officeWebService.getNewsList(OWConstant.OW_ASSOCIATION_NEWS,OWConstant.OW_SHOW_NEWS_NUM,false);
        // 转换create_time字段，拆分为“年”和“月日”两部分，其余属性不变，用于前台新闻列表显示
        List<Map<String,Object>> newsMapList = newsService.formatCreateTime(newsList);
        model.addAttribute("newsMapList",newsMapList);

        // 用来判断页面上将左边选中的菜单文字设置成蓝色（class=on）
        model.addAttribute("flagname",OWConstant.OW_ASSOCIATION_NEWS);

        Integer countNews = newsService.getCountOfCategory(OWConstant.OW_ASSOCIATION_NEWS);
        if (countNews > OWConstant.OW_SHOW_NEWS_NUM){
            model.addAttribute("isShowMore",1);//表示页面显示“点击查看更多”按钮
        }else{
            model.addAttribute("isShowMore",0);//不显示
        }

        // category放到前台作为“浏览更多”方法的参数
        model.addAttribute("category",newsCategoryService.getIdByName(OWConstant.OW_ASSOCIATION_NEWS));

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_news_nav.html";
    }

    /**
     * 跳转到微信媒体报道列表页面
     */
    @RequestMapping(value="/wx_news_media")
    public String wx_news_media(Model model){

        // 获取新闻列表（类别为“协会新闻”）,按时间降序排列
        List<News> newsList = officeWebService.getNewsList(OWConstant.OW_MEDIA_REPORT,OWConstant.OW_SHOW_NEWS_NUM,false);
        // 转换create_time字段，拆分为“年”和“月日”两部分，其余属性不变，用于前台新闻列表显示
        List<Map<String,Object>> mediaMapList = newsService.formatCreateTime(newsList);
        model.addAttribute("mediaMapList",mediaMapList);

        // 用来判断页面上将左边选中的菜单文字设置成蓝色（class=on）
        model.addAttribute("flagname",OWConstant.OW_MEDIA_REPORT);

        Integer countNews = newsService.getCountOfCategory(OWConstant.OW_MEDIA_REPORT);
        if (countNews > OWConstant.OW_SHOW_NEWS_NUM){
            model.addAttribute("isShowMore",1);//表示页面显示“点击查看更多”按钮
        }else{
            model.addAttribute("isShowMore",0);//不显示
        }

        // category放到前台作为“浏览更多”方法的参数
        model.addAttribute("category",newsCategoryService.getIdByName(OWConstant.OW_MEDIA_REPORT));

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_news_media.html";
    }

    /**
     * 跳转到微信视频中心列表页面
     */
    @RequestMapping(value="/wx_news_vedio")
    public String wx_news_vedio(Model model){

        // 获取新闻列表（类别为“协会新闻”）,按时间降序排列
        List<News> newsList = officeWebService.getNewsList(OWConstant.OW_VEDIO_CENTER,OWConstant.OW_SHOW_NEWS_NUM,false);
        // 转换create_time字段，拆分为“年”和“月日”两部分，其余属性不变，用于前台新闻列表显示
        List<Map<String,Object>> vedioMapList = newsService.formatCreateTime(newsList);
        model.addAttribute("vedioMapList",vedioMapList);

        // 用来判断页面上将左边选中的菜单文字设置成蓝色（class=on）
        model.addAttribute("flagname",OWConstant.OW_VEDIO_CENTER);

        Integer countNews = newsService.getCountOfCategory(OWConstant.OW_VEDIO_CENTER);
        if (countNews > OWConstant.OW_SHOW_NEWS_NUM){
            model.addAttribute("isShowMore",1);//表示页面显示“点击查看更多”按钮
        }else{
            model.addAttribute("isShowMore",0);//不显示
        }

        // category放到前台作为“浏览更多”方法的参数
        model.addAttribute("category",newsCategoryService.getIdByName(OWConstant.OW_VEDIO_CENTER));

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_news_vedio.html";
    }

    /**
     * 跳转到微信行业资讯列表页面
     */
    @RequestMapping(value="/wx_news_info")
    public String wx_news_info(Model model){

        // 获取新闻列表（类别为“行业资讯”）,按时间降序排列
        List<News> infoList = officeWebService.getNewsList(OWConstant.OW_PROFESSION_INFO,OWConstant.OW_SHOW_NEWS_NUM,false);
        List<Map<String,Object>> infoMapList = officeWebService.formatCreateTime(infoList,"yyyy-MM-dd");
        model.addAttribute("infoMapList", infoMapList);

        // 用来判断页面上将左边选中的菜单文字设置成蓝色（class=on）
        model.addAttribute("flagname",OWConstant.OW_PROFESSION_INFO);

        Integer countNews = newsService.getCountOfCategory(OWConstant.OW_PROFESSION_INFO);
        if (countNews > OWConstant.OW_SHOW_NEWS_NUM){
            model.addAttribute("isShowMore",1);//表示页面显示“点击查看更多”按钮
        }else{
            model.addAttribute("isShowMore",0);//不显示
        }

        // category放到前台作为“浏览更多”方法的参数
        model.addAttribute("category",newsCategoryService.getIdByName(OWConstant.OW_PROFESSION_INFO));

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_news_info.html";
    }

    /**
     * 跳转到微信行业资讯列表页面(微信导航页)
     */
    @RequestMapping(value="/wx_news_info_nav")
    public String wx_news_info_nav(Model model){

        // 获取新闻列表（类别为“行业资讯”）,按时间降序排列
        List<News> infoList = officeWebService.getNewsList(OWConstant.OW_PROFESSION_INFO,OWConstant.OW_SHOW_NEWS_NUM,false);
        List<Map<String,Object>> infoMapList = officeWebService.formatCreateTime(infoList,"yyyy-MM-dd");
        model.addAttribute("infoMapList", infoMapList);

        // 用来判断页面上将左边选中的菜单文字设置成蓝色（class=on）
        model.addAttribute("flagname",OWConstant.OW_PROFESSION_INFO);

        Integer countNews = newsService.getCountOfCategory(OWConstant.OW_PROFESSION_INFO);
        if (countNews > OWConstant.OW_SHOW_NEWS_NUM){
            model.addAttribute("isShowMore",1);//表示页面显示“点击查看更多”按钮
        }else{
            model.addAttribute("isShowMore",0);//不显示
        }

        // category放到前台作为“浏览更多”方法的参数
        model.addAttribute("category",newsCategoryService.getIdByName(OWConstant.OW_PROFESSION_INFO));

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_news_info_nav.html";
    }


    /**
     * 跳转到微信政策法规列表页面
     */
    @RequestMapping(value="/wx_news_law")
    public String wx_news_law(Model model){

        // 获取新闻列表（类别为“行业资讯”）,按时间降序排列
        List<News> infoList = officeWebService.getNewsList(OWConstant.OW_LAWS_REGULATIONS,OWConstant.OW_SHOW_NEWS_NUM,false);
        List<Map<String,Object>> infoMapList = officeWebService.formatCreateTime(infoList,"yyyy-MM-dd");
        model.addAttribute("infoMapList", infoMapList);

        // 用来判断页面上将左边选中的菜单文字设置成蓝色（class=on）
        model.addAttribute("flagname",OWConstant.OW_LAWS_REGULATIONS);

        Integer countNews = newsService.getCountOfCategory(OWConstant.OW_LAWS_REGULATIONS);
        if (countNews > OWConstant.OW_SHOW_NEWS_NUM){
            model.addAttribute("isShowMore",1);//表示页面显示“点击查看更多”按钮
        }else{
            model.addAttribute("isShowMore",0);//不显示
        }

        // category放到前台作为“浏览更多”方法的参数
        model.addAttribute("category",newsCategoryService.getIdByName(OWConstant.OW_LAWS_REGULATIONS));

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_news_law.html";
    }

    /**
     * 跳转到新闻详情页面
     */
    @RequestMapping("/wx_newsdetail/{webnewsId}/{category}")
    public String detail(@PathVariable Long webnewsId, @PathVariable Long category, Model model) {

        if (ToolUtil.isOneEmpty(webnewsId,category)) {
            throw new GunsException(BizExceptionEnum.REQUEST_NULL);
        }

        if (!ToolUtil.isNum(webnewsId) || !ToolUtil.isNum(category)){
            throw new GunsException(BizExceptionEnum.REQUEST_PARA_ERROR);
        }

        String categoryName = newsCategoryService.selectById(category).getName();
        if (categoryName.equals(OWConstant.OW_VEDIO_CENTER)){
            model.addAttribute("isVedio",1);
        }else{
            model.addAttribute("isVedio",0);
        }

        if (categoryName.equals(OWConstant.OW_ANOUNCEMENT)){
            model.addAttribute("isAnounce",1);
        }else{
            model.addAttribute("isAnounce",0);
        }

        News news = newsService.selectById(webnewsId);
        if (news != null){
            if (categoryName.equals(OWConstant.OW_VEDIO_CENTER)){
                // 去掉ueditor自动给视频地址添加的p标签
                news.setContent(news.getContent().replace("<p>","").replace("</>",""));
                model.addAttribute("webnews",news);
            }
            model.addAttribute("webnews",news);
            model.addAttribute("date",new SimpleDateFormat("yyyy年MM月dd日").format(news.getCreateTime()));
        }

        // 统计新闻的阅读数，每点击一次加一次的阅读数
        news.setReadtimes(news.getReadtimes() + 1);
        news.updateById();

        // 获取num条类型相同的相关新闻(排除当前新闻)
        List<News> relatedsList = newsService.getRelatedNews(3,false,news.getId(),category);
        model.addAttribute("relatedsList",relatedsList);

        // 获取当前新闻的下一条(注意：日期格式化中HH表示24小时制，hh是12小时制，如果mysql中是24小时制，这里用12小时制做对比，就会出现错误)
        News nextNews = newsService.getNextNews(news.getCreateTime(),category);
        model.addAttribute("nextNews",nextNews);

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_newsdetail.html";
    }


    /**
     * 跳转到微信端“会员风采”页面
     */
    @RequestMapping("/wx_member")
    public String wx_member(Model model){
        // 获取新闻列表（类别为“会员风采”）
        List<News> newsMapList = officeWebService.getNumNewsByCategory(OWConstant.OW_MEMBER_DEMEANOUR,null,false);
        // 转换newsList中creat_time字段的格式为yyyy-MM-dd
        List<Map<String,Object>> memberPhotoMapList = officeWebService.formatCreateTime(newsMapList,"yyyy-MM-dd");
        model.addAttribute("memberPhotoMapList", memberPhotoMapList);

        // 设置页面keyword、description
        model.addAttribute("title_suffix",OWConstant.OW_TITLE_SUFFIX);
        model.addAttribute("keywords",OWConstant.OW_KEYWORDS);
        model.addAttribute("description",OWConstant.OW_DESCRIPTION);

        return WX_PREFIX + "wx_member.html";
    }


}
